/*
 * @Author: your name
 * @Date: 2021-08-31 16:02:42
 * @LastEditTime: 2021-08-31 18:37:40
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \briup\3-云服务器\es5\day07\重写迭代.js
 */
function big(value) {
    return value > 300;
}
//every  输出bool类型的  数组不受影响  每一个都符合条件的话就输出true
var arr1 = [600, 500, 300, 400];
var arr2 = [1, 2, 3, 4];
//重写every方法
//每一个元素都得符合条件，符合条件的话就输出true
//首先遍历得到每一个值
Array.prototype.myEvery = function(fn) {
    for (var i = 0; i < this.length; i++) {
        //将值代入函数big进行比较
        var a = fn(this[i]);
        //如果有返回值为false则输出false，没有则输出true
        if (a == false) {
            return false;
        } else
            return true;
    }
}
console.log(arr1.myEvery(big)); //true
console.log(arr2.myEvery(big)); //false


//some   输出bool类型的  数组不受影响   只要有一个符合条件的话就输出true
Array.prototype.mySome = function(fn) {
    //遍历数组的值
    for (var i = 0; i < this.length; i++) {
        var b = fn(this[i]);
        if (b == true) {
            return true;
        }
        //如果有返回值为true的，则返回true,没有则返回false
        return false;
    }
}
console.log(arr1.mySome(big)); //true
console.log(arr2.mySome(big)); //false

//重写filter 过滤器  以数组的形式输出符合条件的数值
//函数作为参数
Array.prototype.myFilter = function(fn) {
    //定义一个数组，承接符合条件的数值
    var arr3 = [];
    //for循环，遍历数组中的值
    for (var index in this) {
        //函数判断，哪些值是符合条件的
        var bool = fn(this[index], index, this);
        //返回符合条件的值，保存在数组中
        if (bool)
            arr3.push(this[index]);
    }
    return arr3;
}
console.log(arr1.myFilter(big)); //[ 600, 500, 400 ]


//重写filter 过滤器  以数组的形式输出符合条件的数值
//函数作为参数
Array.prototype.myFilter = function(fn) {
    //定义一个数组，承接符合条件的数值
    var arr3 = [];
    //for循环，遍历数组中的值
    for (var i = 0; i < this.length; i++) {
        //函数判断，哪些值是符合条件的
        //返回符合条件的值，保存在数组中
        // arr3[arr3.length] = fn(this[i]);
        arr3.push(fn(this[i]));
    }
    return arr3;
}

function num(value) {
    if (value > 400) {
        return value;
    }
}
console.log(arr1.myFilter(num));


//重写map方法 一一映射 数组个数不会少，可以对数组进行操作
Array.prototype.myMap = function(fn) {
    //定义一个数组承接新的数组
    var d = [];
    //循环遍历数据项
    for (var i = 0; i < this.length; i++) {
        //对数据项进行处理
        d.push(fn(this[i]));
    }
    //输出新的数组
    return d;
}

function add(value) {
    var result = value + 77;
    return result;
}
console.log(arr2.myMap(add)); //[ 78, 79, 80, 81 ]

//重写forEach方法
Array.prototype.myFor = function(fn) {
    var d = [];
    d.push(fn(this));
}

function com(arr) {
    for (var i = 0; i < arr.length; i++) {
        console.log(arr[i]);;
    }
}
console.log(arr1.myFor(com));